package com.estore.service;

import com.estore.model.Product;
import java.util.*;

/**
 * 商品服务类，负责商品相关的业务逻辑
 * 使用内存Map模拟数据库存储
 */
public class ProductService {

    // 使用Map存储商品数据，key是商品ID，value是商品对象
    private final Map<String, Product> productData = new HashMap<>();

    /**
     * 构造函数，初始化一些商品数据
     */
    public ProductService() {
        initializeSampleData();
    }

    /**
     * 初始化示例数据
     */
    private void initializeSampleData() {
        // 为Java图书创建标签
        Set<String> tagsForJavaBook = new HashSet<>();
        tagsForJavaBook.add("编程");
        tagsForJavaBook.add("畅销");
        tagsForJavaBook.add("热门");
        tagsForJavaBook.add("热门"); // 故意添加重复标签，验证Set的唯一性

        System.out.println("Java图书标签数量: " + tagsForJavaBook.size()); // 验证：应该是3不是4
        System.out.println("Java图书标签内容: " + tagsForJavaBook); // 验证：不应该有重复的"热门"

        productData.put("p001", new Product("p001", "Java从入门到精通", 99.0, 100, tagsForJavaBook));

        // 为MySQL图书创建标签
        Set<String> tagsForMysqlBook = new HashSet<>();
        tagsForMysqlBook.add("数据库");
        tagsForMysqlBook.add("技术");
        tagsForMysqlBook.add("热门");

        productData.put("p002", new Product("p002", "高性能MySQL", 128.5, 50, tagsForMysqlBook));

        // 为健康类商品创建标签
        Set<String> tagsForHealth = new HashSet<>();
        tagsForHealth.add("健康");
        tagsForHealth.add("生活");
        tagsForHealth.add("保健");

        productData.put("p003", new Product("p003", "颈椎康复指南", 45.0, 200, tagsForHealth));

        // 为美容类商品创建标签
        Set<String> tagsForBeauty = new HashSet<>();
        tagsForBeauty.add("美容");
        tagsForBeauty.add("生活");
        tagsForBeauty.add("新品");

        productData.put("p004", new Product("p004", "生发秘籍", 88.0, 0, tagsForBeauty));

        // 家电商品（不带标签）
        productData.put("p005", new Product("p005", "小猫净化器", 188.0, 40));

        // 日用品（不带标签）
        productData.put("p006", new Product("p006", "水杯", 28.0, 10));
    }

    /**
     * 获取所有商品列表
     * @return 商品列表
     */
    public List<Product> getAllProducts() {
        return new ArrayList<>(productData.values());
    }

    /**
     * 根据ID查找商品
     * @param id 商品ID
     * @return 找到的商品对象，如果不存在则返回null
     */
    public Product findProductById(String id) {
        return productData.get(id);
    }

    /**
     * 打印所有商品信息（用于验证标签显示）
     */
    public void printAllProducts() {
        System.out.println("=== 所有商品信息 ===");
        for (Product product : getAllProducts()) {
            System.out.println(product);
        }
        System.out.println("===================");
    }

    /**
     * 测试标签功能的专用方法
     */
    public void testTagFunctionality() {
        System.out.println("=== 标签功能测试 ===");

        // 测试Java图书的标签
        Product javaBook = findProductById("p001");
        if (javaBook != null) {
            System.out.println("Java图书标签: " + javaBook.getTags());
            System.out.println("Java图书标签数量: " + javaBook.getTagCount());
        }

        // 测试无标签商品
        Product cup = findProductById("p006");
        if (cup != null) {
            System.out.println("水杯标签: " + cup.getTags());
            System.out.println("水杯标签数量: " + cup.getTagCount());
        }

        System.out.println("===================");
    }
}